package com.leetcode.integer;

/**
 * @author: ZhouBert
 * @date: 2019/10/10
 * @description: 9. 回文数
 * A
 * 判断一个整数是否是回文数。回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。
 * <p>
 * 示例 1:
 * 输入: 121
 * 输出: true
 * <p>
 * 示例 2:
 * 输入: -121
 * 输出: false
 * 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
 * <p>
 * 示例 3:
 * 输入: 10
 * 输出: false
 * 解释: 从右向左读, 为 01 。因此它不是一个回文数。
 * 进阶:
 * <p>
 * 你能不将整数转为字符串来解决这个问题吗？
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/palindrome-number
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class IsPalindrome9 {

	/**
	 * Mine-利用反转整数的思想
	 * 10ms-93.13
	 * @param x
	 * @return
	 */
	public static boolean isPalindrome(int x) {
		///1.负数-false
		if (x < 0) {
			return false;
		}

		///
		int sourX=x;
		int tempAns=0;
		while (x>0){
			tempAns=x%10+tempAns*10;
			x/=10;
		}
		if(tempAns==sourX){
			return true;
		}else {
			return false;
		}
	}

	public static boolean isPalindromeByHalf(int x){
		///1.负数-false;末尾为0(除了0)-false
		if (x < 0||(x%10==0 && x!=0)) {
			return false;
		}

		int tempAns=0;
		while (x>tempAns){
			tempAns=tempAns*10+x%10;
			x/=10;
		}
		///此时 x <= tempAns
//		if (x==tempAns||(tempAns>10&&x==(tempAns/10))){
//			return true;
//		}else {
//			return false;
//		}
		return x==tempAns||x==(tempAns/10);
	}

	public static void main(String[] args) {
//		isPalindrome(121);
		///2147483647
		System.out.println(Integer.MAX_VALUE);
		///todo:Java 的溢出不会报错。对于题解无妨，但是官方答案中有个比较一般的效率更高的方法--》翻转一半
		isPalindrome(Integer.MAX_VALUE);

		System.out.println(isPalindromeByHalf(1));
	}
}
